/****   request.js   ****/
// 导入axios
import axios from 'axios'
import {confirm, getData, Toast} from './util.js'
//1. 创建新的axios实例，
const service = axios.create({
  // 公共接口--这里注意后面会讲
  baseURL: process.env.BASE_API,
  // 超时时间 单位是ms，这里设置了3s的超时时间
  timeout: 3 * 1000
})

/**
 * 网络请求
 */
const Request = (type, url, params, success, fail) => {
  const config = {
    method: 'post',
    url: url
  }
  if (params) config.params = params
  //这里取token之前，你肯定需要先拿到token,存一下
  let token = getData('token')
  let header = {
    'Content-Type': 'application/json'
  }
  if (!!token) {
    header['X-CMS-HEADER-ACCOUNT'] = token
  }
  //注意使用token的时候需要引入cookie方法或者用本地localStorage等方法，推荐js-cookie
  if (token) {
    config.headers = header
  }
  service(config).then(res => {
    const result = res.data
    if (result.status * 1 === 200) {
      (typeof success == 'function') && success(result.data, result.msg, result.code)
    } else {
      console.log('后台错误码统一处理')
      switch (result.status) {
        // 401:未登录;未登录则跳转登录页面，并携带当前页面的路径;在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:

          break
        // 403:token过期;登录过期对用户进行提示;清除本地token和清空vuex中token对象;跳转登录页面
        case 403:
          confirm({title: '确定登出', content: '登录过期，请重新登录', ok: '重新登录', cancel: '取消'}, () => {
            store.dispatch('FedLogOut').then(() => {
              location.reload() // 为了重新实例化vue-router对象 避免bug
            })
          })
          break
        //404请求不存在
        case 404:
          Toast('网络请求不存在')
          break
        //其他错误,直接抛出错误提示
        default:
          Toast(result.msg)
          break
      }
      (typeof fail == 'function') && fail(null, result.msg, err.code)
    }
  }).catch(reason => {
    (typeof fail == 'function') && fail(null, reason, err.code)
  })
}
// get请求
const Get = (url, data, success, fail) => Request('GET', url, data, success, fail)
// post请求
const Post = (url, data, success, fail) => Request('POST', url, data, success, fail)
// Put请求
const Put = (url, data, success, fail) => Request('Put', url, data, success, fail)

// 导出模块
export {
  Get,
  Post,
  Put,
  Request,
}
